package com.sosky;

/**
 * 917. 仅仅反转字母
 * <p>
 * 给定一个字符串 S，返回 “反转后的” 字符串，其中不是字母的字符都保留在原地，而所有字母的位置发生反转。
 * <p>
 * 示例 1：
 * 输入："ab-cd"
 * 输出："dc-ba"
 * <p>
 * 示例 2：
 * 输入："a-bC-dEf-ghIj"
 * 输出："j-Ih-gfE-dCba"
 * <p>
 * 示例 3：
 * 输入："Test1ng-Leet=code-Q!"
 * 输出："Qedo1ct-eeLg=ntse-T!"
 * <p>
 * 提示：
 * S.length <= 100
 * 33 <= S[i].ASCIIcode <= 122
 * S 中不包含 \ or "
 */
public class Solution917 {
    public static void main(String[] args) {
//        System.out.println("ab-cd : " + reverseOnlyLetters("ab-cd"));
//        System.out.println("a-bC-dEf-ghIj : " + reverseOnlyLetters("a-bC-dEf-ghIj"));
//        System.out.println("Test1ng-Leet=code-Q! : " + reverseOnlyLetters("Test1ng-Leet=code-Q!"));
        System.out.println("-S2,_ : " + reverseOnlyLetters("-S2,_"));
    }

    public static String reverseOnlyLetters(String S) {
        char[] chars = S.toCharArray();
        int lastIndex = chars.length - 1;
        for (int i = 0; i < chars.length; i++) {
            if (i < lastIndex) {
                if ((chars[i] >= 65 && chars[i] <= 90) || (chars[i] >= 97 && chars[i] <= 122)) {
                    for (int j = lastIndex; j >= i; j--) {
                        if (chars[lastIndex] < 65 || (chars[lastIndex] > 90 && chars[lastIndex] < 97) || chars[lastIndex] > 122) {
                            lastIndex--;
                        } else {
                            break;
                        }
                    }
                    char x = chars[i];
                    chars[i] = chars[lastIndex];
                    chars[lastIndex] = x;
                    lastIndex--;
                }
            } else {
                break;
            }
        }
        return String.valueOf(chars);
    }
}
